home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / german / tcpip / gp160.exe / #GPRI.EXE / CONV.PAS < prev    next >
Pascal/Delphi Source File  |  1993-09-13  |  8KB  |  358 lines

  1. {$M 1024,0,0}
  2. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V+,X-}
  3.  
  4. PROGRAM Conv;   { Convers für GP }
  5.  
  6.  
  7. USES Dos,GPRI;
  8.  
  9. CONST
  10.   GPConvers            = 0;
  11.   Version              = '1.00';
  12.   OK                   = '#OK#';
  13.   CR                   = #13;
  14.   SendConversMessage   = 0;
  15.   GetAllConversUsers   = 1;
  16.   GetChannelUsers      = 2;
  17.   SendPrivateMessage   = 3;
  18.   HelpStr1             = #13'*** convers help:'#13+
  19.                             ' /CHannel <n>   or'#13+
  20.                             ' /<n>           switch to channel <n>'#13+
  21.                             ' /Disconnect    disconnects the qso'#13+
  22.                             ' /Help          This text'#13+
  23.                             ' /MSG <call>    Sends a private msg to <call>'#13;
  24.  
  25.   HelpStr2             =    ' /Quit          Terminates the convers session'#13+
  26.                             ' /Who           List of all logged in stations'#13+
  27.                             '***'#13#13;
  28.  
  29.  
  30. TYPE
  31.   Str10         = String[10];
  32.   ConversData   = RECORD
  33.                     FNr,
  34.                     Chan   : Word;
  35.                     Data   : String;
  36.                     ToCall : Str10;
  37.                   END;
  38.  
  39.  
  40.  
  41. VAR
  42.   ConversKanal    : Word;
  43.   QSOData         : QSODataType;
  44.   RightVersion    : Boolean;
  45.  
  46.  
  47.  
  48. PROCEDURE Parse (VAR S : String; Sysop : Boolean); Forward;
  49.  
  50.  
  51.  
  52.  
  53. PROCEDURE UpdateUserList (VAR D : ConversData);
  54.  
  55. VAR
  56.   S   : Str10;
  57.  
  58. BEGIN
  59.   Str(ConversKanal:6,S);
  60.   WITH D DO
  61.     IF (FNr = GetAllConversUsers) OR (Chan = ConversKanal) THEN
  62.       Data := Concat(Data,S,':',QSOData.Call,CR);
  63. END;
  64.  
  65.  
  66.  
  67. PROCEDURE SysopMessage (VAR S : String); far;
  68.  
  69. VAR
  70.   D   : ConversData;
  71.  
  72. BEGIN
  73.   IF S[1] = '/' THEN
  74.     Parse(S,TRUE)
  75.   ELSE BEGIN
  76.     WITH D DO BEGIN
  77.       Data := Concat('-',QSOData.MyCall,'-:',S);
  78.       Chan := ConversKanal;
  79.       FNr := SendConversMessage;
  80.     END;
  81.     SendGPRIMessage(GPConvers,D);
  82.     SendString(D.Data);
  83.   END;
  84.   S := '';
  85. END;
  86.  
  87.  
  88. PROCEDURE GetPrivateMsg (VAR D : ConversData);
  89.  
  90. BEGIN
  91.   WITH D DO
  92.     IF ToCall = QSOData.Call THEN BEGIN
  93.       SendString(Data);
  94.       ToCall := OK;
  95.     END;
  96. END;
  97.  
  98.  
  99.  
  100. PROCEDURE GetConversMessage (Ident : Word; VAR D : ConversData); far;
  101.  
  102. BEGIN
  103.   IF Ident = GPConvers THEN WITH D DO BEGIN
  104.     CASE FNr OF
  105.       SendConversMessage : IF Chan = ConversKanal THEN SendString(Data);
  106.       GetAllConversUsers : UpdateUserList(D);
  107.       GetChannelUsers    : UpdateUserList(D);
  108.       SendPrivateMessage : GetPrivateMsg(D);
  109.     END;
  110.   END;
  111. END;
  112.  
  113.  
  114.  
  115. PROCEDURE UserListe (Mode : Word);
  116.  
  117. VAR
  118.   D   : ConversData;
  119.   S   : Str10;
  120.  
  121. BEGIN
  122.   Str(ConversKanal:6,S);
  123.   WITH D DO BEGIN
  124.     Data := Concat('*** convers users:'#13,S,':',QSOData.MyCall,' (SysOp)',CR);
  125.     Chan := ConversKanal;
  126.     FNr := Mode;
  127.   END;
  128.   UpdateUserList(D);
  129.   SendGPRIMessage(GPConvers,D);
  130.   SendString(D.Data);
  131.   SendString('***'#13#13);
  132. END;
  133.  
  134.  
  135.  
  136. PROCEDURE Login (Chan : Word);
  137.  
  138. VAR
  139.   D  : ConversData;
  140.   S  : Str10;
  141.  
  142. BEGIN
  143.   Str(Chan,S);
  144.   IF Chan <> ConversKanal THEN BEGIN
  145.     WITH D DO BEGIN
  146.       FNr := SendConversMessage;
  147.       Data := Concat('-',QSOData.Call,'- *** switched to channel ',S,CR);
  148.       Chan := ConversKanal;
  149.     END;
  150.     SendGPRIMessage(GPConvers,D);
  151.     SendString('*** now on channel '+S+CR);
  152.   END;
  153.   ConversKanal := Chan;
  154.   WITH D DO BEGIN
  155.     FNr := SendConversMessage;
  156.     Data := Concat('-',QSOData.Call,'- *** login',CR);
  157.     Chan := ConversKanal;
  158.   END;
  159.   SendGPRIMessage(GPConvers,D);
  160.   UserListe(GetChannelUsers);
  161. END;
  162.  
  163.  
  164.  
  165. PROCEDURE GrossSchrift (VAR S);
  166.  
  167. VAR
  168.   L : Byte;
  169.  
  170. BEGIN
  171.   FOR L := 1 TO Byte(S) DO String(S)[L] := UpCase(String(S)[L]);
  172. END;
  173.  
  174.  
  175.  
  176. FUNCTION BefehlErkannt (Befehl,S : String; Min : Byte) : Boolean;
  177.  
  178. VAR
  179.   I,N      : Byte;
  180.   Gefunden : Boolean;
  181.  
  182. BEGIN
  183.   GrossSchrift(S);
  184.   Gefunden := FALSE;
  185.   I := Min;
  186.   WHILE (I <= Byte(Befehl[0])) AND NOT Gefunden DO BEGIN
  187.     Gefunden := (Pos(Copy(Befehl,1,I)+' ',S) = 1) OR (Pos(Copy(Befehl,1,I)+CR,S) = 1);
  188.     Inc(I);
  189.   END;
  190.   BefehlErkannt := Gefunden;
  191. END;
  192.  
  193.  
  194.  
  195.  
  196. PROCEDURE Parse (VAR S : String; Sysop : Boolean);
  197.  
  198. VAR
  199.   Dummy,
  200.   Fehler   : Integer;
  201.   D        : ConversData;
  202.  
  203. BEGIN
  204.   IF (Byte(S[0]) > 0) AND (S[1] = '/') THEN BEGIN
  205.     Delete(S,1,1);
  206.     IF BefehlErkannt('HELP',S,1) THEN BEGIN
  207.       SendString(HelpStr1);
  208.       SendString(HelpStr2);
  209.       Exit;
  210.     END;
  211.     IF BefehlErkannt('WHO',S,1) THEN BEGIN
  212.       UserListe(GetAllConversUsers);
  213.       Exit;
  214.     END;
  215.     IF BefehlErkannt('QUIT',S,1) THEN BEGIN
  216.       SendString(#13'*** convers session terminated. 73...'#13);
  217.       ProgrammEnde := TRUE;
  218.       Exit;
  219.     END;
  220.     IF BefehlErkannt('DISCONNECT',S,1) THEN BEGIN
  221.       SendString(#13'*** convers session terminated. 73...'#13);
  222.       DisconnectChannel;
  223.       Exit;
  224.     END;
  225.     IF BefehlErkannt('CHANNEL',S,2) THEN BEGIN
  226.       Dummy := Pos(' ',S);
  227.       IF Dummy > 0 THEN
  228.         Delete(S,1,Dummy)
  229.       ELSE BEGIN
  230.         SendString('*** argument required.'#13);
  231.         Exit;
  232.       END;
  233.     END;
  234.     IF BefehlErkannt('MSG',S,1) THEN BEGIN
  235.       Dummy := Pos(' ',S);
  236.       IF Dummy > 0 THEN BEGIN
  237.         Delete(S,1,Dummy);
  238.         WHILE (S[0] > #0) AND (S[1] = ' ') DO Delete(S,1,1);
  239.         Dummy := Pos(' ',S);
  240.         IF Dummy > 0 THEN BEGIN
  241.           D.ToCall := Copy(S,1,Dummy-1);
  242.           GrossSchrift(D.ToCall);
  243.           WHILE (S[0] > #0) AND (S[1] = ' ') DO Delete(S,1,1);
  244.           IF Sysop THEN
  245.             D.Data := Concat('*',QSOData.MyCall,'*:',Copy(S,Dummy+1,Byte(S[0])))
  246.           ELSE
  247.             D.Data := Concat('*',QSOData.Call,'*:',Copy(S,Dummy+1,Byte(S[0])));
  248.           D.FNr := SendPrivateMessage;
  249.           D.Chan := 0;
  250.           SendGPRIMessage(GPConvers,D);
  251.           IF D.ToCall <> OK THEN
  252.             SendString('*** station not connected.'#13);
  253.         END ELSE
  254.           SendString('*** where''s the text???'#13);
  255.       END ELSE
  256.         SendString('*** argument required.'#13);
  257.       Exit;
  258.     END;
  259.  
  260.     Val(Copy(S,1,Byte(S[0])-1),Dummy,Fehler);
  261.     IF (Fehler = 0) THEN BEGIN
  262.       IF Dummy <> ConversKanal THEN
  263.         Login(Dummy)
  264.       ELSE
  265.         SendString('*** already on channel '+S);
  266.       Exit;
  267.     END;
  268.     SendString(#13'*** unknown convers command.'#13#13);
  269.   END;
  270. END;
  271.  
  272.  
  273.  
  274.  
  275.  
  276. PROCEDURE RX (VAR S : String); far;
  277.  
  278. VAR
  279.   D   : ConversData;
  280.  
  281. BEGIN
  282.   IF S[1] = '/' THEN
  283.     Parse(S,FALSE)
  284.   ELSE BEGIN
  285.     WITH D DO BEGIN
  286.       FNr := SendConversMessage;
  287.       Data := Concat('-',QSOData.Call,'-:',S);
  288.       Chan := ConversKanal;
  289.     END;
  290.     SendGPRIMessage(GPConvers,D);
  291.   END;
  292. END;
  293.  
  294.  
  295.  
  296. PROCEDURE Init; far;
  297.  
  298. VAR
  299.   S   : String;
  300.   D   : ConversData;
  301.   P   : Byte;
  302.   F   : Integer;
  303.  
  304. BEGIN
  305.   IF NOT RightVersion THEN BEGIN
  306.     S := CR+'*** GPRI Version 1.1 required.'+CR+CR;
  307.     ProgrammEnde := TRUE;
  308.     SendString(S);
  309.     Exit;
  310.   END ELSE
  311.     S := #13'*** GP-Convers Revision '+Version+'  (C) Ulf Saran, DH1DAE 1993'#13+
  312.             '*** Type /H for help'#13#13;
  313.   SendString(S);
  314.   IF ParamCount > 0 THEN BEGIN
  315.     Val(ParamStr(1),ConversKanal,F);
  316.     IF F > 0 THEN BEGIN
  317.       SendString('*** invalid channel number.'#13);
  318.       ConversKanal := 0;
  319.     END;
  320.   END ELSE
  321.     ConversKanal := 0;
  322.   GetQSOData(QSOData);
  323.   WITH QSOData DO BEGIN
  324.     P := Pos('-',Call);
  325.     IF P > 0 THEN Delete(Call,P,3);  { SSID weglassen }
  326.     P := Pos('-',MyCall);
  327.     IF P > 0 THEN Delete(MyCall,P,3);  { SSID weglassen }
  328.   END;
  329.   Login(ConversKanal);
  330. END;
  331.  
  332.  
  333.  
  334. PROCEDURE Ende; far;
  335.  
  336. VAR
  337.   D  : ConversData;
  338.  
  339. BEGIN
  340.   WITH D DO BEGIN
  341.     Data := Concat('-',QSOData.Call,'- *** logout'#13);
  342.     FNr := SendConversMessage;
  343.     Chan := ConversKanal;
  344.   END;
  345.   SendGPRIMessage(GPConvers,D);
  346. END;
  347.  
  348.  
  349.  
  350. BEGIN
  351.   RightVersion := InstallTXHandler(@SysopMessage) AND
  352.                   InstallGPRIMessageHandler(@GetConversMessage);
  353.   IF NOT TaskInit(@Init,@RX,NIL,@Ende) THEN BEGIN
  354.     Writeln('Kein GPRI-Host gefunden, Programm kann nicht gestartet werden.');
  355.     Halt;
  356.   END;
  357.   Keep(0);
  358. END.